package com.tt.job.register;

import com.tt.job.JobInfo;
import com.tt.job.api.Job;
import com.tt.job.api.schedule.JobSchedule;

import java.util.List;
import java.util.Map;

/**
 * 用于维护在注册中心的job信息，所有方法调用应该保持与注册中心数据一致
 */
public interface JobRegistryCenter extends RegistryCenter {

    /**
     * 向注册中心注册job信息
     *
     * @param jobClass
     * @param job
     */
    void addJob(String jobClass, Job job);

    /**
     * 通知注册中心的job变化信息
     *
     * @param listener
     */
    void addJobListener(JobChangeListener listener);

    /**
     * 添加任务调度计划
     *
     * @param schedule
     */
    void addJobSchedule(JobSchedule schedule);

    /**
     * 注册中心中schedule信息变化时的通知监听
     *
     * @param listener
     */
    void addJobScheduleListener(ScheduleChangeListener listener);

    /**
     * 删除指定的调度计划
     *
     * @param type
     * @param group
     * @param name
     */
    void deleteSchedule(String type, String group, String name);

    /**
     * 获取注册中心存储的所有的job的调度配置信息
     *
     * @return
     */
    List<JobSchedule> getJobSchedules();

    /**
     * 获取当前注册中心中所有的job信息，此接口返回的内容应该与注册中心实时保持一致
     *
     * @return
     */
    Map<String, JobInfo> getJobs();

    /**
     * 向注册中心注册本进程客户端
     *
     * @param localPid
     */
    void registryJobClient(String jobClass, String jobType, String localPid);
}
